#ifndef __BLOODGENERATOR_MODULE_H_
#define __BLOODGENERATOR_MODULE_H_
#include "IModule.h"

namespace sdk {
namespace message {
namespace module {  
namespace blood {

using namespace sdk::msg;
using namespace sdk::msg::mod;

class BloodGeneratorModule : public IModule {
public:
    BloodGeneratorModule(ModulesProxy &proxy, const std::string &msgId, const WsSession &session);

    /// name IModule method
    /// @{
    bool doDirective(std::shared_ptr<std::string> binptr, std::optional<steady_time_point> endtime, uint32_t retryIdx) override;
    /// }
private:
    bool doStartCaptureSucceeded(std::shared_ptr<std::string> binptr);
    bool doStartCaptureFailed(std::shared_ptr<std::string> binptr);
    bool doReportBloodException(std::shared_ptr<std::string> binptr);
    bool doReportInitialPressure(std::shared_ptr<std::string> binptr);
    bool doReportCaptureState(std::shared_ptr<std::string> binptr);
    bool doReportSetThresholdsSucceeded(std::shared_ptr<std::string> binptr);
    bool doReportBloodResult(std::shared_ptr<std::string> binptr, std::optional<steady_time_point> endtime, uint32_t retryIndex);
    bool doReportEmergencyStopped(std::shared_ptr<std::string> binptr);
    bool pushUserOutData(std::string &json);
    
};

} // namespace blood
} // namespace module
} // namespace message
} // namespace sdk
#endif // !__BLOODGENERATOR_MODULE_H_